/* !
	* @Author: miss-tree
	* @Date: 2024-12-15 21:54:35
	* @Description: 建议不打包编译，静态资源路径和上传接口打包后的路径会出现问题
*/
const path = require('path')
const fs = require('fs')
const CopyPlugin = require('copy-webpack-plugin');
const nodeExternals = require('webpack-node-externals')
const isDev = process.env.NODE_ENV === 'development'


module.exports = {
	entry: path.resolve(__dirname, './index.js'), // 入口文件
	mode: isDev ? 'development' : 'production', // 开发模式
	output: {
		path: path.resolve(__dirname, 'dist'), // 输出路径
		clean: true, // 在生成文件之前清空 output 目录
		filename: pathData => {
			return pathData.chunk.name && pathData.chunk.name.indexOf('main') > -1
				? '[name].js' : "js/[contenthash].js" //'js/[contenthash].js'
		}
		// filename: 'main.js', // 输出文件名
	},
	// ! 目标环境
	target: 'node', // 告诉 Webpack 这是一个 Node.js 应用
	module: {
		rules: [
			!isDev&&{
				test: /\.m?js$/, // 匹配.js或.mjs文件
				exclude: /node_modules/, // 排除node_modules文件夹
				use: {
					loader: 'babel-loader', // 使用Babel-loader进行转换
					options: {
						presets: ['@babel/preset-env'] // 使用@babel/preset-env预设
					}
				}
			}
		].filter(Boolean)
	},
	optimization: {
		splitChunks: {
			chunks: 'all', // 对所有模块进行分割
			// minSize: 50000, // 分割代码的最小大小
			minRemainingSize: 0, // 分割代码的最小剩余大小
			maxSize: 1024 * 500, // 分割代码的最大大小
			minChunks: 1 // 分割代码的最小模块数
		}
	},
	externals: [
		// express: 'commonjs express',  // 使用 commonjs 方式引入的 express
		// nodeExternals() // 排除node_modules中的依赖以便不将它们打包到 bundle 中
],
plugins:[
	new	CopyPlugin({
		patterns: [
			{
				from: path.resolve(__dirname, './public'), // 从 public 目录中复制文件
				to: path.resolve(__dirname, 'dist/public') ,// 复制到 dist/public 目录中
				globOptions: {
					ignore: [
							// Ignore all `txt` files
							// '**/*.webp',
							// '**/*.jpg',
							// '**/*.pdf',
							// '**/*.png',
							// Ignore all files in all subdirectories
							// '**/image/*.png',
							// '**/uploads/**',
					],
			},
			},
			// {
			// 	from: path.resolve(__dirname, './logs'), 
			// 	to: path.resolve(__dirname, 'dist/logs') ,
			// 	globOptions: {
			// 		ignore: [
			// 				'**/**',
			// 		],
			// },
			// }
		]
	})
],
	resolve: {
		// extensions: ['.js', '.json'] // 自动解析这些扩展名的文件
	},
	devServer: {
		hot: true, // 启用热更新
		port: 8000 // 服务端口
	}
}
